#include <list>
#include <iostream>

using namespace std;

#define N 10
#define OUT(arr, msg) do{ \
    cout << msg; \
    for (size_t i = 0; i < 10; i++) cout << arr[i] << " "; \
    cout << endl; \
}while(0)

int main(int argc, char const *argv[])
{
    /*****************************************************************************************************
     * list双向链表容器
     * ---------------------------------------------------------------------------------------------------
     * list是一个双向链表， 这意味着它在内存空间中的存储不是连续的
     *****************************************************************************************************/
    // -----------------------------------------------
    // --- 定义 ----
    // -----------------------------------------------
    // 默认初始化一个链表
    list<int> nums_a;

    // 初始化时指定元素个数
    list<int> nums_b(10);

    // 使用初始化列表初始化
    list<int> nums_c {10, 20, 30};

    // -----------------------------------------------
    // --- 增 ----
    // -----------------------------------------------
    list<int> nums_for_add;
    nums_for_add.push_back(100);

    // -----------------------------------------------
    // --- 删 ----
    // -----------------------------------------------
    nums_for_add.pop_back();

    // -----------------------------------------------
    // --- 改 ----
    // -----------------------------------------------
    // 双向链表修改只能通过迭代器获得对应元素的指针， 再通过指针修改元素
    list<int>::iterator p = nums_for_add.begin();
    *p = 100;

    // -----------------------------------------------
    // --- 查 ----
    // -----------------------------------------------
    // 双向链表只能通过迭代器去访问
    p = nums_for_add.begin();
    cout << "访问元素 *p : " << *p << endl;

    /*****************************************************************************************************
     * 成员函数
     * ---------------------------------------------------------------------------------------------------
     * array.begin()        返回：随机访问迭代器  首元素位置指针   
     * 
     *****************************************************************************************************/
    
    // array.begin() 
    // -----------------------------------------------
    
    return 0;
}
